// export gametype ; starting begin if multiplayer then
   0: LD_OWVAR 4
   4: IFFALSE 18
// gametype = mp_game_type else
   6: LD_ADDR_EXP 1
  10: PUSH
  11: LD_OWVAR 6
  15: ST_TO_ADDR
  16: GO 26
// gametype = 1 ;
  18: LD_ADDR_EXP 1
  22: PUSH
  23: LD_INT 1
  25: ST_TO_ADDR
// case gametype of 1 :
  26: LD_EXP 1
  30: PUSH
  31: LD_INT 1
  33: DOUBLE
  34: EQUAL
  35: IFTRUE 39
  37: GO 55
  39: POP
// begin enable ( 25 ) ;
  40: LD_INT 25
  42: ENABLE_MARKED
// disable ( 15 ) ;
  43: LD_INT 15
  45: DISABLE_MARKED
// disable ( 35 ) ;
  46: LD_INT 35
  48: DISABLE_MARKED
// starting_vehicles ;
  49: CALL 3439 0 0
// end ; end ;
  53: GO 56
  55: POP
// end ; end_of_file
  56: END
// export def_victory_conditions , def_number_of_people , def_people_respawning , def_vehicles_at_start , def_vehicles_respawning , def_vehicles_nations , def_siberite_rocket , def_vehicles_durability , Player_Side , Player_Team , Side_Positions , Side_Teams , Side_Nations , Teams , Side_Count , Team_count ; export game_time , point_limit , vehresp , vehmax1 , vehmax2 , vehmax , startvehperc , startveh , vehdur , npeop , peopresp , vehnats , sibrock , def_mechanic_skill , skills , to_resp ; function read_multiplayer_and_game_parameters ; var i ; begin
  57: LD_INT 0
  59: PPUSH
  60: PPUSH
// if MultiPlayer then
  61: LD_OWVAR 4
  65: IFFALSE 129
// begin Player_Side = mp_player_side ;
  67: LD_ADDR_EXP 10
  71: PUSH
  72: LD_OWVAR 7
  76: ST_TO_ADDR
// Player_Team = mp_player_team ;
  77: LD_ADDR_EXP 11
  81: PUSH
  82: LD_OWVAR 8
  86: ST_TO_ADDR
// Side_Positions = mp_sides_positions ;
  87: LD_ADDR_EXP 12
  91: PUSH
  92: LD_OWVAR 17
  96: ST_TO_ADDR
// Side_Teams = mp_sides_teams ;
  97: LD_ADDR_EXP 13
 101: PUSH
 102: LD_OWVAR 15
 106: ST_TO_ADDR
// Side_Nations = mp_sides_nations ;
 107: LD_ADDR_EXP 14
 111: PUSH
 112: LD_OWVAR 16
 116: ST_TO_ADDR
// Teams = mp_teams ;
 117: LD_ADDR_EXP 15
 121: PUSH
 122: LD_OWVAR 12
 126: ST_TO_ADDR
// end else
 127: GO 273
// begin randomize ;
 129: CALL_OW 10
// Player_Side = 1 ;
 133: LD_ADDR_EXP 10
 137: PUSH
 138: LD_INT 1
 140: ST_TO_ADDR
// Player_Team = 0 ;
 141: LD_ADDR_EXP 11
 145: PUSH
 146: LD_INT 0
 148: ST_TO_ADDR
// Side_Positions = [ 1 , 3 , 6 , 0 , 0 , 0 , 0 , 7 ] ;
 149: LD_ADDR_EXP 12
 153: PUSH
 154: LD_INT 1
 156: PUSH
 157: LD_INT 3
 159: PUSH
 160: LD_INT 6
 162: PUSH
 163: LD_INT 0
 165: PUSH
 166: LD_INT 0
 168: PUSH
 169: LD_INT 0
 171: PUSH
 172: LD_INT 0
 174: PUSH
 175: LD_INT 7
 177: PUSH
 178: EMPTY
 179: LIST
 180: LIST
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: LIST
 187: ST_TO_ADDR
// Side_Teams = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
 188: LD_ADDR_EXP 13
 192: PUSH
 193: LD_INT 0
 195: PUSH
 196: LD_INT 0
 198: PUSH
 199: LD_INT 0
 201: PUSH
 202: LD_INT 0
 204: PUSH
 205: LD_INT 0
 207: PUSH
 208: LD_INT 0
 210: PUSH
 211: LD_INT 0
 213: PUSH
 214: LD_INT 0
 216: PUSH
 217: EMPTY
 218: LIST
 219: LIST
 220: LIST
 221: LIST
 222: LIST
 223: LIST
 224: LIST
 225: LIST
 226: ST_TO_ADDR
// Side_Nations = [ 1 , 3 , 1 , 2 , 2 , 2 , 2 , 2 ] ;
 227: LD_ADDR_EXP 14
 231: PUSH
 232: LD_INT 1
 234: PUSH
 235: LD_INT 3
 237: PUSH
 238: LD_INT 1
 240: PUSH
 241: LD_INT 2
 243: PUSH
 244: LD_INT 2
 246: PUSH
 247: LD_INT 2
 249: PUSH
 250: LD_INT 2
 252: PUSH
 253: LD_INT 2
 255: PUSH
 256: EMPTY
 257: LIST
 258: LIST
 259: LIST
 260: LIST
 261: LIST
 262: LIST
 263: LIST
 264: LIST
 265: ST_TO_ADDR
// Teams = [ ] ;
 266: LD_ADDR_EXP 15
 270: PUSH
 271: EMPTY
 272: ST_TO_ADDR
// end ; Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 273: LD_ADDR_EXP 16
 277: PUSH
 278: LD_EXP 12
 282: PUSH
 283: LD_INT 0
 285: PUSH
 286: EMPTY
 287: LIST
 288: DIFF
 289: PUSH
 290: LD_INT 0
 292: PLUS
 293: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 294: LD_ADDR_EXP 17
 298: PUSH
 299: LD_EXP 13
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: EMPTY
 308: LIST
 309: DIFF
 310: PUSH
 311: LD_INT 0
 313: PLUS
 314: ST_TO_ADDR
// if MultiPlayer then
 315: LD_OWVAR 4
 319: IFFALSE 427
// begin def_victory_conditions = GetMultiplayerSetting ( 0 ) ;
 321: LD_ADDR_EXP 2
 325: PUSH
 326: LD_INT 0
 328: PPUSH
 329: CALL_OW 426
 333: ST_TO_ADDR
// def_number_of_people = GetMultiplayerSetting ( 1 ) ;
 334: LD_ADDR_EXP 3
 338: PUSH
 339: LD_INT 1
 341: PPUSH
 342: CALL_OW 426
 346: ST_TO_ADDR
// def_people_respawning = GetMultiplayerSetting ( 2 ) ;
 347: LD_ADDR_EXP 4
 351: PUSH
 352: LD_INT 2
 354: PPUSH
 355: CALL_OW 426
 359: ST_TO_ADDR
// def_vehicles_at_start = GetMultiplayerSetting ( 3 ) ;
 360: LD_ADDR_EXP 5
 364: PUSH
 365: LD_INT 3
 367: PPUSH
 368: CALL_OW 426
 372: ST_TO_ADDR
// def_vehicles_respawning = GetMultiplayerSetting ( 4 ) ;
 373: LD_ADDR_EXP 6
 377: PUSH
 378: LD_INT 4
 380: PPUSH
 381: CALL_OW 426
 385: ST_TO_ADDR
// def_vehicles_nations = GetMultiplayerSetting ( 5 ) ;
 386: LD_ADDR_EXP 7
 390: PUSH
 391: LD_INT 5
 393: PPUSH
 394: CALL_OW 426
 398: ST_TO_ADDR
// def_siberite_rocket = GetMultiplayerSetting ( 6 ) ;
 399: LD_ADDR_EXP 8
 403: PUSH
 404: LD_INT 6
 406: PPUSH
 407: CALL_OW 426
 411: ST_TO_ADDR
// def_mechanic_skill = GetMultiplayerSetting ( 7 ) ;
 412: LD_ADDR_EXP 31
 416: PUSH
 417: LD_INT 7
 419: PPUSH
 420: CALL_OW 426
 424: ST_TO_ADDR
// end else
 425: GO 495
// begin randomize ;
 427: CALL_OW 10
// def_victory_conditions = 2 ;
 431: LD_ADDR_EXP 2
 435: PUSH
 436: LD_INT 2
 438: ST_TO_ADDR
// def_number_of_people = 1 ;
 439: LD_ADDR_EXP 3
 443: PUSH
 444: LD_INT 1
 446: ST_TO_ADDR
// def_people_respawning = 1 ;
 447: LD_ADDR_EXP 4
 451: PUSH
 452: LD_INT 1
 454: ST_TO_ADDR
// def_vehicles_at_start = 1 ;
 455: LD_ADDR_EXP 5
 459: PUSH
 460: LD_INT 1
 462: ST_TO_ADDR
// def_vehicles_respawning = 2 ;
 463: LD_ADDR_EXP 6
 467: PUSH
 468: LD_INT 2
 470: ST_TO_ADDR
// def_vehicles_nations = 0 ;
 471: LD_ADDR_EXP 7
 475: PUSH
 476: LD_INT 0
 478: ST_TO_ADDR
// def_siberite_rocket = 1 ;
 479: LD_ADDR_EXP 8
 483: PUSH
 484: LD_INT 1
 486: ST_TO_ADDR
// def_vehicles_durability = 1 ;
 487: LD_ADDR_EXP 9
 491: PUSH
 492: LD_INT 1
 494: ST_TO_ADDR
// end ; game_time = [ 5 5$0 , 10 10$0 , 15 15$0 , 20 20$0 , 30 30$0 , 0 , 0 , 0 , 0 , 0 , 0 ] [ def_victory_conditions + 1 ] ;
 495: LD_ADDR_EXP 18
 499: PUSH
 500: LD_INT 10500
 502: PUSH
 503: LD_INT 21000
 505: PUSH
 506: LD_INT 31500
 508: PUSH
 509: LD_INT 42000
 511: PUSH
 512: LD_INT 63000
 514: PUSH
 515: LD_INT 0
 517: PUSH
 518: LD_INT 0
 520: PUSH
 521: LD_INT 0
 523: PUSH
 524: LD_INT 0
 526: PUSH
 527: LD_INT 0
 529: PUSH
 530: LD_INT 0
 532: PUSH
 533: EMPTY
 534: LIST
 535: LIST
 536: LIST
 537: LIST
 538: LIST
 539: LIST
 540: LIST
 541: LIST
 542: LIST
 543: LIST
 544: LIST
 545: PUSH
 546: LD_EXP 2
 550: PUSH
 551: LD_INT 1
 553: PLUS
 554: ARRAY
 555: ST_TO_ADDR
// point_limit = [ 0 , 0 , 0 , 0 , 0 , 0 , 5 , 10 , 15 , 20 , 30 , 50 ] [ def_victory_conditions + 1 ] ;
 556: LD_ADDR_EXP 19
 560: PUSH
 561: LD_INT 0
 563: PUSH
 564: LD_INT 0
 566: PUSH
 567: LD_INT 0
 569: PUSH
 570: LD_INT 0
 572: PUSH
 573: LD_INT 0
 575: PUSH
 576: LD_INT 0
 578: PUSH
 579: LD_INT 5
 581: PUSH
 582: LD_INT 10
 584: PUSH
 585: LD_INT 15
 587: PUSH
 588: LD_INT 20
 590: PUSH
 591: LD_INT 30
 593: PUSH
 594: LD_INT 50
 596: PUSH
 597: EMPTY
 598: LIST
 599: LIST
 600: LIST
 601: LIST
 602: LIST
 603: LIST
 604: LIST
 605: LIST
 606: LIST
 607: LIST
 608: LIST
 609: LIST
 610: PUSH
 611: LD_EXP 2
 615: PUSH
 616: LD_INT 1
 618: PLUS
 619: ARRAY
 620: ST_TO_ADDR
// npeop = [ 4 , 6 , 8 , 10 ] [ def_number_of_people + 1 ] ;
 621: LD_ADDR_EXP 27
 625: PUSH
 626: LD_INT 4
 628: PUSH
 629: LD_INT 6
 631: PUSH
 632: LD_INT 8
 634: PUSH
 635: LD_INT 10
 637: PUSH
 638: EMPTY
 639: LIST
 640: LIST
 641: LIST
 642: LIST
 643: PUSH
 644: LD_EXP 3
 648: PUSH
 649: LD_INT 1
 651: PLUS
 652: ARRAY
 653: ST_TO_ADDR
// peopresp = [ false , [ 0 0$40 , 1 1$20 ] , [ 0 0$20 , 0 0$40 ] , [ 0 0$10 , 0 0$20 ] ] [ def_people_respawning + 1 ] ;
 654: LD_ADDR_EXP 28
 658: PUSH
 659: LD_INT 0
 661: PUSH
 662: LD_INT 1400
 664: PUSH
 665: LD_INT 2800
 667: PUSH
 668: EMPTY
 669: LIST
 670: LIST
 671: PUSH
 672: LD_INT 700
 674: PUSH
 675: LD_INT 1400
 677: PUSH
 678: EMPTY
 679: LIST
 680: LIST
 681: PUSH
 682: LD_INT 350
 684: PUSH
 685: LD_INT 700
 687: PUSH
 688: EMPTY
 689: LIST
 690: LIST
 691: PUSH
 692: EMPTY
 693: LIST
 694: LIST
 695: LIST
 696: LIST
 697: PUSH
 698: LD_EXP 4
 702: PUSH
 703: LD_INT 1
 705: PLUS
 706: ARRAY
 707: ST_TO_ADDR
// vehmax1 = [ 3 , 6 , 9 ] [ def_vehicles_respawning + 1 ] ;
 708: LD_ADDR_EXP 21
 712: PUSH
 713: LD_INT 3
 715: PUSH
 716: LD_INT 6
 718: PUSH
 719: LD_INT 9
 721: PUSH
 722: EMPTY
 723: LIST
 724: LIST
 725: LIST
 726: PUSH
 727: LD_EXP 6
 731: PUSH
 732: LD_INT 1
 734: PLUS
 735: ARRAY
 736: ST_TO_ADDR
// vehmax2 = [ 2 , 4 , 6 ] [ def_vehicles_respawning + 1 ] ;
 737: LD_ADDR_EXP 22
 741: PUSH
 742: LD_INT 2
 744: PUSH
 745: LD_INT 4
 747: PUSH
 748: LD_INT 6
 750: PUSH
 751: EMPTY
 752: LIST
 753: LIST
 754: LIST
 755: PUSH
 756: LD_EXP 6
 760: PUSH
 761: LD_INT 1
 763: PLUS
 764: ARRAY
 765: ST_TO_ADDR
// vehmax = vehmax1 + side_count * vehmax2 ;
 766: LD_ADDR_EXP 23
 770: PUSH
 771: LD_EXP 21
 775: PUSH
 776: LD_EXP 16
 780: PUSH
 781: LD_EXP 22
 785: MUL
 786: PLUS
 787: ST_TO_ADDR
// vehdur = [ [ 25 , 50 ] , [ 45 , 90 ] , [ 75 , 150 ] ] [ def_vehicles_durability + 1 ] ;
 788: LD_ADDR_EXP 26
 792: PUSH
 793: LD_INT 25
 795: PUSH
 796: LD_INT 50
 798: PUSH
 799: EMPTY
 800: LIST
 801: LIST
 802: PUSH
 803: LD_INT 45
 805: PUSH
 806: LD_INT 90
 808: PUSH
 809: EMPTY
 810: LIST
 811: LIST
 812: PUSH
 813: LD_INT 75
 815: PUSH
 816: LD_INT 150
 818: PUSH
 819: EMPTY
 820: LIST
 821: LIST
 822: PUSH
 823: EMPTY
 824: LIST
 825: LIST
 826: LIST
 827: PUSH
 828: LD_EXP 9
 832: PUSH
 833: LD_INT 1
 835: PLUS
 836: ARRAY
 837: ST_TO_ADDR
// vehresp = [ [ 0 0$40 , 2 2$00 ] , [ 0 0$20 , 1 1$00 ] , [ 0 0$10 , 0 0$30 ] ] [ def_vehicles_respawning + 1 ] ;
 838: LD_ADDR_EXP 20
 842: PUSH
 843: LD_INT 1400
 845: PUSH
 846: LD_INT 4200
 848: PUSH
 849: EMPTY
 850: LIST
 851: LIST
 852: PUSH
 853: LD_INT 700
 855: PUSH
 856: LD_INT 2100
 858: PUSH
 859: EMPTY
 860: LIST
 861: LIST
 862: PUSH
 863: LD_INT 350
 865: PUSH
 866: LD_INT 1050
 868: PUSH
 869: EMPTY
 870: LIST
 871: LIST
 872: PUSH
 873: EMPTY
 874: LIST
 875: LIST
 876: LIST
 877: PUSH
 878: LD_EXP 6
 882: PUSH
 883: LD_INT 1
 885: PLUS
 886: ARRAY
 887: ST_TO_ADDR
// startvehperc = [ 0 , 10 , 20 , 40 ] [ def_vehicles_at_start + 1 ] ;
 888: LD_ADDR_EXP 24
 892: PUSH
 893: LD_INT 0
 895: PUSH
 896: LD_INT 10
 898: PUSH
 899: LD_INT 20
 901: PUSH
 902: LD_INT 40
 904: PUSH
 905: EMPTY
 906: LIST
 907: LIST
 908: LIST
 909: LIST
 910: PUSH
 911: LD_EXP 5
 915: PUSH
 916: LD_INT 1
 918: PLUS
 919: ARRAY
 920: ST_TO_ADDR
// startveh = vehmax * startvehperc div 100 ;
 921: LD_ADDR_EXP 25
 925: PUSH
 926: LD_EXP 23
 930: PUSH
 931: LD_EXP 24
 935: MUL
 936: PUSH
 937: LD_INT 100
 939: DIV
 940: ST_TO_ADDR
// vehnats = [ [ 1 , 2 , 3 ] , [ 1 ] , [ 3 ] , [ 2 ] , [ 1 , 3 ] , [ 3 , 2 ] , [ 2 , 1 ] ] [ def_vehicles_nations + 1 ] ;
 941: LD_ADDR_EXP 29
 945: PUSH
 946: LD_INT 1
 948: PUSH
 949: LD_INT 2
 951: PUSH
 952: LD_INT 3
 954: PUSH
 955: EMPTY
 956: LIST
 957: LIST
 958: LIST
 959: PUSH
 960: LD_INT 1
 962: PUSH
 963: EMPTY
 964: LIST
 965: PUSH
 966: LD_INT 3
 968: PUSH
 969: EMPTY
 970: LIST
 971: PUSH
 972: LD_INT 2
 974: PUSH
 975: EMPTY
 976: LIST
 977: PUSH
 978: LD_INT 1
 980: PUSH
 981: LD_INT 3
 983: PUSH
 984: EMPTY
 985: LIST
 986: LIST
 987: PUSH
 988: LD_INT 3
 990: PUSH
 991: LD_INT 2
 993: PUSH
 994: EMPTY
 995: LIST
 996: LIST
 997: PUSH
 998: LD_INT 2
1000: PUSH
1001: LD_INT 1
1003: PUSH
1004: EMPTY
1005: LIST
1006: LIST
1007: PUSH
1008: EMPTY
1009: LIST
1010: LIST
1011: LIST
1012: LIST
1013: LIST
1014: LIST
1015: LIST
1016: PUSH
1017: LD_EXP 7
1021: PUSH
1022: LD_INT 1
1024: PLUS
1025: ARRAY
1026: ST_TO_ADDR
// sibrock = [ 0 , 3 , 7 , 30 ] [ def_siberite_rocket + 1 ] ;
1027: LD_ADDR_EXP 30
1031: PUSH
1032: LD_INT 0
1034: PUSH
1035: LD_INT 3
1037: PUSH
1038: LD_INT 7
1040: PUSH
1041: LD_INT 30
1043: PUSH
1044: EMPTY
1045: LIST
1046: LIST
1047: LIST
1048: LIST
1049: PUSH
1050: LD_EXP 8
1054: PUSH
1055: LD_INT 1
1057: PLUS
1058: ARRAY
1059: ST_TO_ADDR
// skills = [ 3 , 5 , 7 , 10 ] [ def_mechanic_skill + 1 ] ;
1060: LD_ADDR_EXP 32
1064: PUSH
1065: LD_INT 3
1067: PUSH
1068: LD_INT 5
1070: PUSH
1071: LD_INT 7
1073: PUSH
1074: LD_INT 10
1076: PUSH
1077: EMPTY
1078: LIST
1079: LIST
1080: LIST
1081: LIST
1082: PUSH
1083: LD_EXP 31
1087: PUSH
1088: LD_INT 1
1090: PLUS
1091: ARRAY
1092: ST_TO_ADDR
// for i = 1 to 8 do
1093: LD_ADDR_VAR 0 2
1097: PUSH
1098: DOUBLE
1099: LD_INT 1
1101: DEC
1102: ST_TO_ADDR
1103: LD_INT 8
1105: PUSH
1106: FOR_TO
1107: IFFALSE 1139
// if Side_Positions [ i ] then
1109: LD_EXP 12
1113: PUSH
1114: LD_VAR 0 2
1118: ARRAY
1119: IFFALSE 1137
// to_resp := to_resp ^ i ;
1121: LD_ADDR_EXP 33
1125: PUSH
1126: LD_EXP 33
1130: PUSH
1131: LD_VAR 0 2
1135: ADD
1136: ST_TO_ADDR
1137: GO 1106
1139: POP
1140: POP
// end ;
1141: LD_VAR 0 1
1145: RET
// export chassis , weapons , areas_wheeled , areas_tracked ; export coordinates ; function prepare_map_coordinates ; var best , c , bestc , minv , i , j , n ; begin
1146: LD_INT 0
1148: PPUSH
1149: PPUSH
1150: PPUSH
1151: PPUSH
1152: PPUSH
1153: PPUSH
1154: PPUSH
1155: PPUSH
// areas_wheeled = [ aw1 , aw2 , aw3 , aw4 ] ;
1156: LD_ADDR_EXP 36
1160: PUSH
1161: LD_INT 21
1163: PUSH
1164: LD_INT 19
1166: PUSH
1167: LD_INT 17
1169: PUSH
1170: LD_INT 15
1172: PUSH
1173: EMPTY
1174: LIST
1175: LIST
1176: LIST
1177: LIST
1178: ST_TO_ADDR
// areas_tracked = [ at1 , at2 , at3 , at4 ] ;
1179: LD_ADDR_EXP 37
1183: PUSH
1184: LD_INT 20
1186: PUSH
1187: LD_INT 18
1189: PUSH
1190: LD_INT 16
1192: PUSH
1193: LD_INT 14
1195: PUSH
1196: EMPTY
1197: LIST
1198: LIST
1199: LIST
1200: LIST
1201: ST_TO_ADDR
// best = 0 ;
1202: LD_ADDR_VAR 0 2
1206: PUSH
1207: LD_INT 0
1209: ST_TO_ADDR
// for n = 1 to 200 do
1210: LD_ADDR_VAR 0 8
1214: PUSH
1215: DOUBLE
1216: LD_INT 1
1218: DEC
1219: ST_TO_ADDR
1220: LD_INT 200
1222: PUSH
1223: FOR_TO
1224: IFFALSE 1520
// begin c = [ ] ;
1226: LD_ADDR_VAR 0 3
1230: PUSH
1231: EMPTY
1232: ST_TO_ADDR
// for i = 1 to side_count do
1233: LD_ADDR_VAR 0 6
1237: PUSH
1238: DOUBLE
1239: LD_INT 1
1241: DEC
1242: ST_TO_ADDR
1243: LD_EXP 16
1247: PUSH
1248: FOR_TO
1249: IFFALSE 1278
// c := c ^ [ RandHexArea ( arstartveh , false ) ] ;
1251: LD_ADDR_VAR 0 3
1255: PUSH
1256: LD_VAR 0 3
1260: PUSH
1261: LD_INT 22
1263: PPUSH
1264: LD_INT 0
1266: PPUSH
1267: CALL_OW 16
1271: PUSH
1272: EMPTY
1273: LIST
1274: ADD
1275: ST_TO_ADDR
1276: GO 1248
1278: POP
1279: POP
// minv = 10000 ;
1280: LD_ADDR_VAR 0 5
1284: PUSH
1285: LD_INT 10000
1287: ST_TO_ADDR
// for i = 1 to side_count do
1288: LD_ADDR_VAR 0 6
1292: PUSH
1293: DOUBLE
1294: LD_INT 1
1296: DEC
1297: ST_TO_ADDR
1298: LD_EXP 16
1302: PUSH
1303: FOR_TO
1304: IFFALSE 1484
// for j = 1 to side_count do
1306: LD_ADDR_VAR 0 7
1310: PUSH
1311: DOUBLE
1312: LD_INT 1
1314: DEC
1315: ST_TO_ADDR
1316: LD_EXP 16
1320: PUSH
1321: FOR_TO
1322: IFFALSE 1480
// if i <> j then
1324: LD_VAR 0 6
1328: PUSH
1329: LD_VAR 0 7
1333: NONEQUAL
1334: IFFALSE 1478
// begin if GetDistXY ( c [ i ] [ 1 ] , c [ i ] [ 2 ] , c [ j ] [ 1 ] , c [ j ] [ 2 ] ) < minv then
1336: LD_VAR 0 3
1340: PUSH
1341: LD_VAR 0 6
1345: ARRAY
1346: PUSH
1347: LD_INT 1
1349: ARRAY
1350: PPUSH
1351: LD_VAR 0 3
1355: PUSH
1356: LD_VAR 0 6
1360: ARRAY
1361: PUSH
1362: LD_INT 2
1364: ARRAY
1365: PPUSH
1366: LD_VAR 0 3
1370: PUSH
1371: LD_VAR 0 7
1375: ARRAY
1376: PUSH
1377: LD_INT 1
1379: ARRAY
1380: PPUSH
1381: LD_VAR 0 3
1385: PUSH
1386: LD_VAR 0 7
1390: ARRAY
1391: PUSH
1392: LD_INT 2
1394: ARRAY
1395: PPUSH
1396: CALL_OW 298
1400: PUSH
1401: LD_VAR 0 5
1405: LESS
1406: IFFALSE 1478
// minv := GetDistXY ( c [ i ] [ 1 ] , c [ i ] [ 2 ] , c [ j ] [ 1 ] , c [ j ] [ 2 ] ) ;
1408: LD_ADDR_VAR 0 5
1412: PUSH
1413: LD_VAR 0 3
1417: PUSH
1418: LD_VAR 0 6
1422: ARRAY
1423: PUSH
1424: LD_INT 1
1426: ARRAY
1427: PPUSH
1428: LD_VAR 0 3
1432: PUSH
1433: LD_VAR 0 6
1437: ARRAY
1438: PUSH
1439: LD_INT 2
1441: ARRAY
1442: PPUSH
1443: LD_VAR 0 3
1447: PUSH
1448: LD_VAR 0 7
1452: ARRAY
1453: PUSH
1454: LD_INT 1
1456: ARRAY
1457: PPUSH
1458: LD_VAR 0 3
1462: PUSH
1463: LD_VAR 0 7
1467: ARRAY
1468: PUSH
1469: LD_INT 2
1471: ARRAY
1472: PPUSH
1473: CALL_OW 298
1477: ST_TO_ADDR
// end ;
1478: GO 1321
1480: POP
1481: POP
1482: GO 1303
1484: POP
1485: POP
// if minv > best then
1486: LD_VAR 0 5
1490: PUSH
1491: LD_VAR 0 2
1495: GREATER
1496: IFFALSE 1518
// begin best := minv ;
1498: LD_ADDR_VAR 0 2
1502: PUSH
1503: LD_VAR 0 5
1507: ST_TO_ADDR
// bestc := c ;
1508: LD_ADDR_VAR 0 4
1512: PUSH
1513: LD_VAR 0 3
1517: ST_TO_ADDR
// end ; end ;
1518: GO 1223
1520: POP
1521: POP
// coordinates := [ ] ;
1522: LD_ADDR_EXP 38
1526: PUSH
1527: EMPTY
1528: ST_TO_ADDR
// for i = 1 to 8 do
1529: LD_ADDR_VAR 0 6
1533: PUSH
1534: DOUBLE
1535: LD_INT 1
1537: DEC
1538: ST_TO_ADDR
1539: LD_INT 8
1541: PUSH
1542: FOR_TO
1543: IFFALSE 1630
// if side_positions [ i ] = 0 then
1545: LD_EXP 12
1549: PUSH
1550: LD_VAR 0 6
1554: ARRAY
1555: PUSH
1556: LD_INT 0
1558: EQUAL
1559: IFFALSE 1587
// coordinates := coordinates ^ [ [ 0 , 0 ] ] else
1561: LD_ADDR_EXP 38
1565: PUSH
1566: LD_EXP 38
1570: PUSH
1571: LD_INT 0
1573: PUSH
1574: LD_INT 0
1576: PUSH
1577: EMPTY
1578: LIST
1579: LIST
1580: PUSH
1581: EMPTY
1582: LIST
1583: ADD
1584: ST_TO_ADDR
1585: GO 1628
// begin coordinates := coordinates ^ [ bestc [ 1 ] ] ;
1587: LD_ADDR_EXP 38
1591: PUSH
1592: LD_EXP 38
1596: PUSH
1597: LD_VAR 0 4
1601: PUSH
1602: LD_INT 1
1604: ARRAY
1605: PUSH
1606: EMPTY
1607: LIST
1608: ADD
1609: ST_TO_ADDR
// bestc := delete ( bestc , 1 ) ;
1610: LD_ADDR_VAR 0 4
1614: PUSH
1615: LD_VAR 0 4
1619: PPUSH
1620: LD_INT 1
1622: PPUSH
1623: CALL_OW 3
1627: ST_TO_ADDR
// end ;
1628: GO 1542
1630: POP
1631: POP
// end ;
1632: LD_VAR 0 1
1636: RET
// function prepare_constants ; begin
1637: LD_INT 0
1639: PPUSH
// chassis = [ [ [ [ us_light_wheeled ] , [ ] ] , [ [ us_medium_wheeled ] , [ us_medium_tracked ] ] , [ [ ] , [ us_heavy_tracked , us_morphling ] ] ] , [ [ [ ar_light_trike , ar_hovercraft ] , [ ] ] , [ [ ar_medium_trike ] , [ ar_half_tracked ] ] , [ [ ] , [ ar_half_tracked ] ] ] , [ [ [ ] , [ ] ] , [ [ ru_medium_wheeled ] , [ ru_medium_tracked ] ] , [ [ ru_heavy_wheeled ] , [ ru_heavy_tracked ] ] ] ] ;
1640: LD_ADDR_EXP 34
1644: PUSH
1645: LD_INT 1
1647: PUSH
1648: EMPTY
1649: LIST
1650: PUSH
1651: EMPTY
1652: PUSH
1653: EMPTY
1654: LIST
1655: LIST
1656: PUSH
1657: LD_INT 2
1659: PUSH
1660: EMPTY
1661: LIST
1662: PUSH
1663: LD_INT 3
1665: PUSH
1666: EMPTY
1667: LIST
1668: PUSH
1669: EMPTY
1670: LIST
1671: LIST
1672: PUSH
1673: EMPTY
1674: PUSH
1675: LD_INT 4
1677: PUSH
1678: LD_INT 5
1680: PUSH
1681: EMPTY
1682: LIST
1683: LIST
1684: PUSH
1685: EMPTY
1686: LIST
1687: LIST
1688: PUSH
1689: EMPTY
1690: LIST
1691: LIST
1692: LIST
1693: PUSH
1694: LD_INT 12
1696: PUSH
1697: LD_INT 11
1699: PUSH
1700: EMPTY
1701: LIST
1702: LIST
1703: PUSH
1704: EMPTY
1705: PUSH
1706: EMPTY
1707: LIST
1708: LIST
1709: PUSH
1710: LD_INT 13
1712: PUSH
1713: EMPTY
1714: LIST
1715: PUSH
1716: LD_INT 14
1718: PUSH
1719: EMPTY
1720: LIST
1721: PUSH
1722: EMPTY
1723: LIST
1724: LIST
1725: PUSH
1726: EMPTY
1727: PUSH
1728: LD_INT 14
1730: PUSH
1731: EMPTY
1732: LIST
1733: PUSH
1734: EMPTY
1735: LIST
1736: LIST
1737: PUSH
1738: EMPTY
1739: LIST
1740: LIST
1741: LIST
1742: PUSH
1743: EMPTY
1744: PUSH
1745: EMPTY
1746: PUSH
1747: EMPTY
1748: LIST
1749: LIST
1750: PUSH
1751: LD_INT 21
1753: PUSH
1754: EMPTY
1755: LIST
1756: PUSH
1757: LD_INT 22
1759: PUSH
1760: EMPTY
1761: LIST
1762: PUSH
1763: EMPTY
1764: LIST
1765: LIST
1766: PUSH
1767: LD_INT 23
1769: PUSH
1770: EMPTY
1771: LIST
1772: PUSH
1773: LD_INT 24
1775: PUSH
1776: EMPTY
1777: LIST
1778: PUSH
1779: EMPTY
1780: LIST
1781: LIST
1782: PUSH
1783: EMPTY
1784: LIST
1785: LIST
1786: LIST
1787: PUSH
1788: EMPTY
1789: LIST
1790: LIST
1791: LIST
1792: ST_TO_ADDR
// weapons = [ [ [ us_machine_gun , 1 , 100 ] , [ us_light_gun , 1 , 100 ] , [ us_radar , 1 , 100 ] , [ us_gatling_gun , 2 , 100 ] , [ us_double_gun , 2 , 100 ] , [ us_rocket_launcher , 2 , 100 ] , [ us_laser , 2 , 100 ] , [ us_heavy_gun , 3 , 100 ] , [ us_bulldozer , 3 , 100 ] , [ us_double_laser , 3 , 100 ] ] , [ [ ar_multimissile_ballista , 1 , 100 ] , [ ar_double_machine_gun , 1 , 100 ] , [ ar_light_gun , 1 , 100 ] , [ ar_radar , 1 , 100 ] , [ ar_gatling_gun , 2 , 100 ] , [ ar_gun , 2 , 100 ] , [ ar_rocket_launcher , 2 , 100 ] , [ ar_selfpropelled_bomb , 2 , 100 ] , [ ar_flame_thrower , 2 , 100 ] , [ 66 , 3 , 100 ] ] , [ [ ru_heavy_machine_gun , 2 , 100 ] , [ ru_gatling_gun , 2 , 100 ] , [ ru_gun , 2 , 100 ] , [ ru_rocket_launcher , 2 , 100 ] , [ ru_heavy_gun , 3 , 100 ] , [ ru_rocket , 3 , 100 ] , [ ru_bulldozer , 3 , 100 ] ] ] ;
1793: LD_ADDR_EXP 35
1797: PUSH
1798: LD_INT 2
1800: PUSH
1801: LD_INT 1
1803: PUSH
1804: LD_INT 100
1806: PUSH
1807: EMPTY
1808: LIST
1809: LIST
1810: LIST
1811: PUSH
1812: LD_INT 3
1814: PUSH
1815: LD_INT 1
1817: PUSH
1818: LD_INT 100
1820: PUSH
1821: EMPTY
1822: LIST
1823: LIST
1824: LIST
1825: PUSH
1826: LD_INT 11
1828: PUSH
1829: LD_INT 1
1831: PUSH
1832: LD_INT 100
1834: PUSH
1835: EMPTY
1836: LIST
1837: LIST
1838: LIST
1839: PUSH
1840: LD_INT 4
1842: PUSH
1843: LD_INT 2
1845: PUSH
1846: LD_INT 100
1848: PUSH
1849: EMPTY
1850: LIST
1851: LIST
1852: LIST
1853: PUSH
1854: LD_INT 5
1856: PUSH
1857: LD_INT 2
1859: PUSH
1860: LD_INT 100
1862: PUSH
1863: EMPTY
1864: LIST
1865: LIST
1866: LIST
1867: PUSH
1868: LD_INT 7
1870: PUSH
1871: LD_INT 2
1873: PUSH
1874: LD_INT 100
1876: PUSH
1877: EMPTY
1878: LIST
1879: LIST
1880: LIST
1881: PUSH
1882: LD_INT 9
1884: PUSH
1885: LD_INT 2
1887: PUSH
1888: LD_INT 100
1890: PUSH
1891: EMPTY
1892: LIST
1893: LIST
1894: LIST
1895: PUSH
1896: LD_INT 6
1898: PUSH
1899: LD_INT 3
1901: PUSH
1902: LD_INT 100
1904: PUSH
1905: EMPTY
1906: LIST
1907: LIST
1908: LIST
1909: PUSH
1910: LD_INT 14
1912: PUSH
1913: LD_INT 3
1915: PUSH
1916: LD_INT 100
1918: PUSH
1919: EMPTY
1920: LIST
1921: LIST
1922: LIST
1923: PUSH
1924: LD_INT 10
1926: PUSH
1927: LD_INT 3
1929: PUSH
1930: LD_INT 100
1932: PUSH
1933: EMPTY
1934: LIST
1935: LIST
1936: LIST
1937: PUSH
1938: EMPTY
1939: LIST
1940: LIST
1941: LIST
1942: LIST
1943: LIST
1944: LIST
1945: LIST
1946: LIST
1947: LIST
1948: LIST
1949: PUSH
1950: LD_INT 22
1952: PUSH
1953: LD_INT 1
1955: PUSH
1956: LD_INT 100
1958: PUSH
1959: EMPTY
1960: LIST
1961: LIST
1962: LIST
1963: PUSH
1964: LD_INT 24
1966: PUSH
1967: LD_INT 1
1969: PUSH
1970: LD_INT 100
1972: PUSH
1973: EMPTY
1974: LIST
1975: LIST
1976: LIST
1977: PUSH
1978: LD_INT 23
1980: PUSH
1981: LD_INT 1
1983: PUSH
1984: LD_INT 100
1986: PUSH
1987: EMPTY
1988: LIST
1989: LIST
1990: LIST
1991: PUSH
1992: LD_INT 30
1994: PUSH
1995: LD_INT 1
1997: PUSH
1998: LD_INT 100
2000: PUSH
2001: EMPTY
2002: LIST
2003: LIST
2004: LIST
2005: PUSH
2006: LD_INT 25
2008: PUSH
2009: LD_INT 2
2011: PUSH
2012: LD_INT 100
2014: PUSH
2015: EMPTY
2016: LIST
2017: LIST
2018: LIST
2019: PUSH
2020: LD_INT 27
2022: PUSH
2023: LD_INT 2
2025: PUSH
2026: LD_INT 100
2028: PUSH
2029: EMPTY
2030: LIST
2031: LIST
2032: LIST
2033: PUSH
2034: LD_INT 28
2036: PUSH
2037: LD_INT 2
2039: PUSH
2040: LD_INT 100
2042: PUSH
2043: EMPTY
2044: LIST
2045: LIST
2046: LIST
2047: PUSH
2048: LD_INT 29
2050: PUSH
2051: LD_INT 2
2053: PUSH
2054: LD_INT 100
2056: PUSH
2057: EMPTY
2058: LIST
2059: LIST
2060: LIST
2061: PUSH
2062: LD_INT 26
2064: PUSH
2065: LD_INT 2
2067: PUSH
2068: LD_INT 100
2070: PUSH
2071: EMPTY
2072: LIST
2073: LIST
2074: LIST
2075: PUSH
2076: LD_INT 66
2078: PUSH
2079: LD_INT 3
2081: PUSH
2082: LD_INT 100
2084: PUSH
2085: EMPTY
2086: LIST
2087: LIST
2088: LIST
2089: PUSH
2090: EMPTY
2091: LIST
2092: LIST
2093: LIST
2094: LIST
2095: LIST
2096: LIST
2097: LIST
2098: LIST
2099: LIST
2100: LIST
2101: PUSH
2102: LD_INT 42
2104: PUSH
2105: LD_INT 2
2107: PUSH
2108: LD_INT 100
2110: PUSH
2111: EMPTY
2112: LIST
2113: LIST
2114: LIST
2115: PUSH
2116: LD_INT 43
2118: PUSH
2119: LD_INT 2
2121: PUSH
2122: LD_INT 100
2124: PUSH
2125: EMPTY
2126: LIST
2127: LIST
2128: LIST
2129: PUSH
2130: LD_INT 44
2132: PUSH
2133: LD_INT 2
2135: PUSH
2136: LD_INT 100
2138: PUSH
2139: EMPTY
2140: LIST
2141: LIST
2142: LIST
2143: PUSH
2144: LD_INT 45
2146: PUSH
2147: LD_INT 2
2149: PUSH
2150: LD_INT 100
2152: PUSH
2153: EMPTY
2154: LIST
2155: LIST
2156: LIST
2157: PUSH
2158: LD_INT 46
2160: PUSH
2161: LD_INT 3
2163: PUSH
2164: LD_INT 100
2166: PUSH
2167: EMPTY
2168: LIST
2169: LIST
2170: LIST
2171: PUSH
2172: LD_INT 47
2174: PUSH
2175: LD_INT 3
2177: PUSH
2178: LD_INT 100
2180: PUSH
2181: EMPTY
2182: LIST
2183: LIST
2184: LIST
2185: PUSH
2186: LD_INT 53
2188: PUSH
2189: LD_INT 3
2191: PUSH
2192: LD_INT 100
2194: PUSH
2195: EMPTY
2196: LIST
2197: LIST
2198: LIST
2199: PUSH
2200: EMPTY
2201: LIST
2202: LIST
2203: LIST
2204: LIST
2205: LIST
2206: LIST
2207: LIST
2208: PUSH
2209: EMPTY
2210: LIST
2211: LIST
2212: LIST
2213: ST_TO_ADDR
// end ;
2214: LD_VAR 0 1
2218: RET
// var is_tracked ; function random_vehicle ( sibrockprob ) ; var nat , wpset , suma , tmp , i , weap , wwght , wght , chs , trck ; begin
2219: LD_INT 0
2221: PPUSH
2222: PPUSH
2223: PPUSH
2224: PPUSH
2225: PPUSH
2226: PPUSH
2227: PPUSH
2228: PPUSH
2229: PPUSH
2230: PPUSH
2231: PPUSH
// nat := vehnats [ rand ( 1 , vehnats ) ] ;
2232: LD_ADDR_VAR 0 3
2236: PUSH
2237: LD_EXP 29
2241: PUSH
2242: LD_INT 1
2244: PPUSH
2245: LD_EXP 29
2249: PPUSH
2250: CALL_OW 12
2254: ARRAY
2255: ST_TO_ADDR
// if ( nat in [ nation_russian , nation_american ] ) and ( Rand ( 1 , 1000 ) <= sibrockprob ) then
2256: LD_VAR 0 3
2260: PUSH
2261: LD_INT 3
2263: PUSH
2264: LD_INT 1
2266: PUSH
2267: EMPTY
2268: LIST
2269: LIST
2270: IN
2271: PUSH
2272: LD_INT 1
2274: PPUSH
2275: LD_INT 1000
2277: PPUSH
2278: CALL_OW 12
2282: PUSH
2283: LD_VAR 0 1
2287: LESSEQUAL
2288: AND
2289: IFFALSE 2345
// begin wght := 3 ;
2291: LD_ADDR_VAR 0 10
2295: PUSH
2296: LD_INT 3
2298: ST_TO_ADDR
// case nat of nation_russian :
2299: LD_VAR 0 3
2303: PUSH
2304: LD_INT 3
2306: DOUBLE
2307: EQUAL
2308: IFTRUE 2312
2310: GO 2323
2312: POP
// weap := ru_siberium_rocket ; nation_american :
2313: LD_ADDR_VAR 0 8
2317: PUSH
2318: LD_INT 48
2320: ST_TO_ADDR
2321: GO 2343
2323: LD_INT 1
2325: DOUBLE
2326: EQUAL
2327: IFTRUE 2331
2329: GO 2342
2331: POP
// weap := us_siberium_rocket ; end ;
2332: LD_ADDR_VAR 0 8
2336: PUSH
2337: LD_INT 8
2339: ST_TO_ADDR
2340: GO 2343
2342: POP
// end else
2343: GO 2547
// begin wpset := weapons [ nat ] ;
2345: LD_ADDR_VAR 0 4
2349: PUSH
2350: LD_EXP 35
2354: PUSH
2355: LD_VAR 0 3
2359: ARRAY
2360: ST_TO_ADDR
// suma := 0 ;
2361: LD_ADDR_VAR 0 5
2365: PUSH
2366: LD_INT 0
2368: ST_TO_ADDR
// for i := 1 to wpset do
2369: LD_ADDR_VAR 0 7
2373: PUSH
2374: DOUBLE
2375: LD_INT 1
2377: DEC
2378: ST_TO_ADDR
2379: LD_VAR 0 4
2383: PUSH
2384: FOR_TO
2385: IFFALSE 2415
// suma := suma + wpset [ i ] [ 3 ] ;
2387: LD_ADDR_VAR 0 5
2391: PUSH
2392: LD_VAR 0 5
2396: PUSH
2397: LD_VAR 0 4
2401: PUSH
2402: LD_VAR 0 7
2406: ARRAY
2407: PUSH
2408: LD_INT 3
2410: ARRAY
2411: PLUS
2412: ST_TO_ADDR
2413: GO 2384
2415: POP
2416: POP
// tmp := rand ( 1 , suma ) ;
2417: LD_ADDR_VAR 0 6
2421: PUSH
2422: LD_INT 1
2424: PPUSH
2425: LD_VAR 0 5
2429: PPUSH
2430: CALL_OW 12
2434: ST_TO_ADDR
// i := 1 ;
2435: LD_ADDR_VAR 0 7
2439: PUSH
2440: LD_INT 1
2442: ST_TO_ADDR
// while wpset [ i ] [ 3 ] < tmp do
2443: LD_VAR 0 4
2447: PUSH
2448: LD_VAR 0 7
2452: ARRAY
2453: PUSH
2454: LD_INT 3
2456: ARRAY
2457: PUSH
2458: LD_VAR 0 6
2462: LESS
2463: IFFALSE 2507
// begin tmp := tmp - wpset [ i ] [ 3 ] ;
2465: LD_ADDR_VAR 0 6
2469: PUSH
2470: LD_VAR 0 6
2474: PUSH
2475: LD_VAR 0 4
2479: PUSH
2480: LD_VAR 0 7
2484: ARRAY
2485: PUSH
2486: LD_INT 3
2488: ARRAY
2489: MINUS
2490: ST_TO_ADDR
// i := i + 1 ;
2491: LD_ADDR_VAR 0 7
2495: PUSH
2496: LD_VAR 0 7
2500: PUSH
2501: LD_INT 1
2503: PLUS
2504: ST_TO_ADDR
// end ;
2505: GO 2443
// weap := wpset [ i ] [ 1 ] ;
2507: LD_ADDR_VAR 0 8
2511: PUSH
2512: LD_VAR 0 4
2516: PUSH
2517: LD_VAR 0 7
2521: ARRAY
2522: PUSH
2523: LD_INT 1
2525: ARRAY
2526: ST_TO_ADDR
// wwght := wpset [ i ] [ 2 ] ;
2527: LD_ADDR_VAR 0 9
2531: PUSH
2532: LD_VAR 0 4
2536: PUSH
2537: LD_VAR 0 7
2541: ARRAY
2542: PUSH
2543: LD_INT 2
2545: ARRAY
2546: ST_TO_ADDR
// end ; repeat trck := Rand ( 1 , 2 ) ;
2547: LD_ADDR_VAR 0 12
2551: PUSH
2552: LD_INT 1
2554: PPUSH
2555: LD_INT 2
2557: PPUSH
2558: CALL_OW 12
2562: ST_TO_ADDR
// case wwght of 3 :
2563: LD_VAR 0 9
2567: PUSH
2568: LD_INT 3
2570: DOUBLE
2571: EQUAL
2572: IFTRUE 2576
2574: GO 2587
2576: POP
// wght := 3 ; 2 :
2577: LD_ADDR_VAR 0 10
2581: PUSH
2582: LD_INT 3
2584: ST_TO_ADDR
2585: GO 2704
2587: LD_INT 2
2589: DOUBLE
2590: EQUAL
2591: IFTRUE 2595
2593: GO 2632
2595: POP
// if Rand ( 1 , 100 ) <= 80 then
2596: LD_INT 1
2598: PPUSH
2599: LD_INT 100
2601: PPUSH
2602: CALL_OW 12
2606: PUSH
2607: LD_INT 80
2609: LESSEQUAL
2610: IFFALSE 2622
// wght := 2 else
2612: LD_ADDR_VAR 0 10
2616: PUSH
2617: LD_INT 2
2619: ST_TO_ADDR
2620: GO 2630
// wght := 3 ; 1 :
2622: LD_ADDR_VAR 0 10
2626: PUSH
2627: LD_INT 3
2629: ST_TO_ADDR
2630: GO 2704
2632: LD_INT 1
2634: DOUBLE
2635: EQUAL
2636: IFTRUE 2640
2638: GO 2703
2640: POP
// if Rand ( 1 , 100 ) <= 80 then
2641: LD_INT 1
2643: PPUSH
2644: LD_INT 100
2646: PPUSH
2647: CALL_OW 12
2651: PUSH
2652: LD_INT 80
2654: LESSEQUAL
2655: IFFALSE 2667
// wght := 1 else
2657: LD_ADDR_VAR 0 10
2661: PUSH
2662: LD_INT 1
2664: ST_TO_ADDR
2665: GO 2701
// if Rand ( 1 , 100 ) <= 80 then
2667: LD_INT 1
2669: PPUSH
2670: LD_INT 100
2672: PPUSH
2673: CALL_OW 12
2677: PUSH
2678: LD_INT 80
2680: LESSEQUAL
2681: IFFALSE 2693
// wght := 2 else
2683: LD_ADDR_VAR 0 10
2687: PUSH
2688: LD_INT 2
2690: ST_TO_ADDR
2691: GO 2701
// wght := 3 ; end ;
2693: LD_ADDR_VAR 0 10
2697: PUSH
2698: LD_INT 3
2700: ST_TO_ADDR
2701: GO 2704
2703: POP
// if chassis [ nat ] [ wght ] [ trck ] then
2704: LD_EXP 34
2708: PUSH
2709: LD_VAR 0 3
2713: ARRAY
2714: PUSH
2715: LD_VAR 0 10
2719: ARRAY
2720: PUSH
2721: LD_VAR 0 12
2725: ARRAY
2726: IFFALSE 2790
// chs := chassis [ nat ] [ wght ] [ trck ] [ Rand ( 1 , chassis [ nat ] [ wght ] [ trck ] ) ] else
2728: LD_ADDR_VAR 0 11
2732: PUSH
2733: LD_EXP 34
2737: PUSH
2738: LD_VAR 0 3
2742: ARRAY
2743: PUSH
2744: LD_VAR 0 10
2748: ARRAY
2749: PUSH
2750: LD_VAR 0 12
2754: ARRAY
2755: PUSH
2756: LD_INT 1
2758: PPUSH
2759: LD_EXP 34
2763: PUSH
2764: LD_VAR 0 3
2768: ARRAY
2769: PUSH
2770: LD_VAR 0 10
2774: ARRAY
2775: PUSH
2776: LD_VAR 0 12
2780: ARRAY
2781: PPUSH
2782: CALL_OW 12
2786: ARRAY
2787: ST_TO_ADDR
2788: GO 2798
// chs := 0 ;
2790: LD_ADDR_VAR 0 11
2794: PUSH
2795: LD_INT 0
2797: ST_TO_ADDR
// until chs ;
2798: LD_VAR 0 11
2802: IFFALSE 2547
// uc_side := 0 ;
2804: LD_ADDR_OWVAR 20
2808: PUSH
2809: LD_INT 0
2811: ST_TO_ADDR
// uc_nation := nat ;
2812: LD_ADDR_OWVAR 21
2816: PUSH
2817: LD_VAR 0 3
2821: ST_TO_ADDR
// uc_direction := rand ( 0 , 5 ) ;
2822: LD_ADDR_OWVAR 24
2826: PUSH
2827: LD_INT 0
2829: PPUSH
2830: LD_INT 5
2832: PPUSH
2833: CALL_OW 12
2837: ST_TO_ADDR
// vc_chassis := chs ;
2838: LD_ADDR_OWVAR 37
2842: PUSH
2843: LD_VAR 0 11
2847: ST_TO_ADDR
// vc_weapon := weap ;
2848: LD_ADDR_OWVAR 40
2852: PUSH
2853: LD_VAR 0 8
2857: ST_TO_ADDR
// vc_control := control_manual ;
2858: LD_ADDR_OWVAR 38
2862: PUSH
2863: LD_INT 1
2865: ST_TO_ADDR
// case wght of 1 :
2866: LD_VAR 0 10
2870: PUSH
2871: LD_INT 1
2873: DOUBLE
2874: EQUAL
2875: IFTRUE 2879
2877: GO 2890
2879: POP
// vc_engine := engine_solar ; 2 , 3 :
2880: LD_ADDR_OWVAR 39
2884: PUSH
2885: LD_INT 2
2887: ST_TO_ADDR
2888: GO 2916
2890: LD_INT 2
2892: DOUBLE
2893: EQUAL
2894: IFTRUE 2904
2896: LD_INT 3
2898: DOUBLE
2899: EQUAL
2900: IFTRUE 2904
2902: GO 2915
2904: POP
// vc_engine := engine_siberite ; end ;
2905: LD_ADDR_OWVAR 39
2909: PUSH
2910: LD_INT 3
2912: ST_TO_ADDR
2913: GO 2916
2915: POP
// is_tracked := trck = 2 ;
2916: LD_ADDR_LOC 1
2920: PUSH
2921: LD_VAR 0 12
2925: PUSH
2926: LD_INT 2
2928: EQUAL
2929: ST_TO_ADDR
// end ;
2930: LD_VAR 0 2
2934: RET
// export function vehicles_create_vehicle ( atstart ) ; var v , ar ; begin
2935: LD_INT 0
2937: PPUSH
2938: PPUSH
2939: PPUSH
// if atstart then
2940: LD_VAR 0 1
2944: IFFALSE 2955
// random_vehicle ( 0 ) else
2946: LD_INT 0
2948: PPUSH
2949: CALL 2219 0 1
2953: GO 2964
// random_vehicle ( sibrock ) ;
2955: LD_EXP 30
2959: PPUSH
2960: CALL 2219 0 1
// v := CreateVehicle ;
2964: LD_ADDR_VAR 0 3
2968: PUSH
2969: CALL_OW 45
2973: ST_TO_ADDR
// if is_tracked then
2974: LD_LOC 1
2978: IFFALSE 3006
// ar := areas_tracked [ Rand ( 1 , areas_tracked ) ] else
2980: LD_ADDR_VAR 0 4
2984: PUSH
2985: LD_EXP 37
2989: PUSH
2990: LD_INT 1
2992: PPUSH
2993: LD_EXP 37
2997: PPUSH
2998: CALL_OW 12
3002: ARRAY
3003: ST_TO_ADDR
3004: GO 3030
// ar := areas_wheeled [ Rand ( 1 , areas_wheeled ) ] ;
3006: LD_ADDR_VAR 0 4
3010: PUSH
3011: LD_EXP 36
3015: PUSH
3016: LD_INT 1
3018: PPUSH
3019: LD_EXP 36
3023: PPUSH
3024: CALL_OW 12
3028: ARRAY
3029: ST_TO_ADDR
// PlaceUnitArea ( v , ar , not atstart ) ;
3030: LD_VAR 0 3
3034: PPUSH
3035: LD_VAR 0 4
3039: PPUSH
3040: LD_VAR 0 1
3044: NOT
3045: PPUSH
3046: CALL_OW 49
// end ;
3050: LD_VAR 0 2
3054: RET
// function prepare_vehicles ; var i ; begin
3055: LD_INT 0
3057: PPUSH
3058: PPUSH
// for i := 1 to startveh do
3059: LD_ADDR_VAR 0 2
3063: PUSH
3064: DOUBLE
3065: LD_INT 1
3067: DEC
3068: ST_TO_ADDR
3069: LD_EXP 25
3073: PUSH
3074: FOR_TO
3075: IFFALSE 3086
// begin vehicles_create_vehicle ( true ) ;
3077: LD_INT 1
3079: PPUSH
3080: CALL 2935 0 1
// end ;
3084: GO 3074
3086: POP
3087: POP
// end ;
3088: LD_VAR 0 1
3092: RET
// export Team_Game ; function set_attitudes ; var i , j ; begin
3093: LD_INT 0
3095: PPUSH
3096: PPUSH
3097: PPUSH
// if not Team_Game then
3098: LD_EXP 39
3102: NOT
3103: IFFALSE 3199
// begin for i = 1 to 8 do
3105: LD_ADDR_VAR 0 2
3109: PUSH
3110: DOUBLE
3111: LD_INT 1
3113: DEC
3114: ST_TO_ADDR
3115: LD_INT 8
3117: PUSH
3118: FOR_TO
3119: IFFALSE 3197
// for j = 1 to 8 do
3121: LD_ADDR_VAR 0 3
3125: PUSH
3126: DOUBLE
3127: LD_INT 1
3129: DEC
3130: ST_TO_ADDR
3131: LD_INT 8
3133: PUSH
3134: FOR_TO
3135: IFFALSE 3193
// if i <> j then
3137: LD_VAR 0 2
3141: PUSH
3142: LD_VAR 0 3
3146: NONEQUAL
3147: IFFALSE 3171
// SetAttitude ( i , j , att_enemy , true ) else
3149: LD_VAR 0 2
3153: PPUSH
3154: LD_VAR 0 3
3158: PPUSH
3159: LD_INT 2
3161: PPUSH
3162: LD_INT 1
3164: PPUSH
3165: CALL_OW 80
3169: GO 3191
// SetAttitude ( i , j , att_friend , true ) end ;
3171: LD_VAR 0 2
3175: PPUSH
3176: LD_VAR 0 3
3180: PPUSH
3181: LD_INT 1
3183: PPUSH
3184: LD_INT 1
3186: PPUSH
3187: CALL_OW 80
3191: GO 3134
3193: POP
3194: POP
3195: GO 3118
3197: POP
3198: POP
// end ;
3199: LD_VAR 0 1
3203: RET
// function prepare_side ( side ) ; var i ; begin
3204: LD_INT 0
3206: PPUSH
3207: PPUSH
// for i := 1 to npeop do
3208: LD_ADDR_VAR 0 3
3212: PUSH
3213: DOUBLE
3214: LD_INT 1
3216: DEC
3217: ST_TO_ADDR
3218: LD_EXP 27
3222: PUSH
3223: FOR_TO
3224: IFFALSE 3382
// begin uc_side := side ;
3226: LD_ADDR_OWVAR 20
3230: PUSH
3231: LD_VAR 0 1
3235: ST_TO_ADDR
// uc_nation := side_nations [ side ] ;
3236: LD_ADDR_OWVAR 21
3240: PUSH
3241: LD_EXP 14
3245: PUSH
3246: LD_VAR 0 1
3250: ARRAY
3251: ST_TO_ADDR
// hc_name :=  ;
3252: LD_ADDR_OWVAR 26
3256: PUSH
3257: LD_STRING 
3259: ST_TO_ADDR
// PrepareMechanic ( 0 , 4 ) ;
3260: LD_INT 0
3262: PPUSH
3263: LD_INT 4
3265: PPUSH
3266: CALL_OW 383
// hc_importance := 0 ;
3270: LD_ADDR_OWVAR 32
3274: PUSH
3275: LD_INT 0
3277: ST_TO_ADDR
// hc_gallery :=  ;
3278: LD_ADDR_OWVAR 33
3282: PUSH
3283: LD_STRING 
3285: ST_TO_ADDR
// hc_skills = [ Rand ( 0 , 10 ) , Rand ( 0 , 10 ) , Skills , Rand ( 0 , 10 ) ] ;
3286: LD_ADDR_OWVAR 31
3290: PUSH
3291: LD_INT 0
3293: PPUSH
3294: LD_INT 10
3296: PPUSH
3297: CALL_OW 12
3301: PUSH
3302: LD_INT 0
3304: PPUSH
3305: LD_INT 10
3307: PPUSH
3308: CALL_OW 12
3312: PUSH
3313: LD_EXP 32
3317: PUSH
3318: LD_INT 0
3320: PPUSH
3321: LD_INT 10
3323: PPUSH
3324: CALL_OW 12
3328: PUSH
3329: EMPTY
3330: LIST
3331: LIST
3332: LIST
3333: LIST
3334: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , coordinates [ side ] [ 1 ] , coordinates [ side ] [ 2 ] , 4 , false ) ;
3335: CALL_OW 44
3339: PPUSH
3340: LD_EXP 38
3344: PUSH
3345: LD_VAR 0 1
3349: ARRAY
3350: PUSH
3351: LD_INT 1
3353: ARRAY
3354: PPUSH
3355: LD_EXP 38
3359: PUSH
3360: LD_VAR 0 1
3364: ARRAY
3365: PUSH
3366: LD_INT 2
3368: ARRAY
3369: PPUSH
3370: LD_INT 4
3372: PPUSH
3373: LD_INT 0
3375: PPUSH
3376: CALL_OW 50
// end ;
3380: GO 3223
3382: POP
3383: POP
// end ;
3384: LD_VAR 0 2
3388: RET
// function prepare_sides ; var i ; begin
3389: LD_INT 0
3391: PPUSH
3392: PPUSH
// for i := 1 to 8 do
3393: LD_ADDR_VAR 0 2
3397: PUSH
3398: DOUBLE
3399: LD_INT 1
3401: DEC
3402: ST_TO_ADDR
3403: LD_INT 8
3405: PUSH
3406: FOR_TO
3407: IFFALSE 3432
// if side_positions [ i ] then
3409: LD_EXP 12
3413: PUSH
3414: LD_VAR 0 2
3418: ARRAY
3419: IFFALSE 3430
// prepare_side ( i ) ;
3421: LD_VAR 0 2
3425: PPUSH
3426: CALL 3204 0 1
3430: GO 3406
3432: POP
3433: POP
// end ;
3434: LD_VAR 0 1
3438: RET
// export function starting_vehicles ; begin
3439: LD_INT 0
3441: PPUSH
// mp_with_score := true ;
3442: LD_ADDR_OWVAR 14
3446: PUSH
3447: LD_INT 1
3449: ST_TO_ADDR
// mp_selectmsg := true ;
3450: LD_ADDR_OWVAR 13
3454: PUSH
3455: LD_INT 1
3457: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
3458: CALL 57 0 0
// prepare_map_coordinates ;
3462: CALL 1146 0 0
// prepare_constants ;
3466: CALL 1637 0 0
// set_attitudes ;
3470: CALL 3093 0 0
// prepare_sides ;
3474: CALL 3389 0 0
// prepare_vehicles ;
3478: CALL 3055 0 0
// your_side := Player_Side ;
3482: LD_ADDR_OWVAR 2
3486: PUSH
3487: LD_EXP 10
3491: ST_TO_ADDR
// ResetFog ;
3492: CALL_OW 335
// music_nat := Side_Nations [ your_side ] ;
3496: LD_ADDR_OWVAR 71
3500: PUSH
3501: LD_EXP 14
3505: PUSH
3506: LD_OWVAR 2
3510: ARRAY
3511: ST_TO_ADDR
// CenterNowOnXY ( coordinates [ your_side ] [ 1 ] , coordinates [ your_side ] [ 2 ] ) ;
3512: LD_EXP 38
3516: PUSH
3517: LD_OWVAR 2
3521: ARRAY
3522: PUSH
3523: LD_INT 1
3525: ARRAY
3526: PPUSH
3527: LD_EXP 38
3531: PUSH
3532: LD_OWVAR 2
3536: ARRAY
3537: PUSH
3538: LD_INT 2
3540: ARRAY
3541: PPUSH
3542: CALL_OW 86
// end ; end_of_file
3546: LD_VAR 0 1
3550: RET
// on VehicleDestroyed ( veh , side , nation , x , y , direction , chassis , control , engine , weapon ) do var veho , un , old_side , new_side , point ;
3551: LD_INT 0
3553: PPUSH
3554: PPUSH
3555: PPUSH
3556: PPUSH
3557: PPUSH
// begin point := 1 ;
3558: LD_ADDR_VAR 0 15
3562: PUSH
3563: LD_INT 1
3565: ST_TO_ADDR
// if GetSide ( veh ) > 0 then
3566: LD_VAR 0 1
3570: PPUSH
3571: CALL_OW 255
3575: PUSH
3576: LD_INT 0
3578: GREATER
3579: IFFALSE 3680
// begin old_side := GetSide ( veh ) ;
3581: LD_ADDR_VAR 0 13
3585: PUSH
3586: LD_VAR 0 1
3590: PPUSH
3591: CALL_OW 255
3595: ST_TO_ADDR
// new_side := GetSide ( NearestUnitToUnit ( FilterAllUnits ( [ f_not , [ f_side , old_side ] , f_not , [ f_side , 0 ] ] ) , veh ) ) ;
3596: LD_ADDR_VAR 0 14
3600: PUSH
3601: LD_INT 3
3603: PUSH
3604: LD_INT 22
3606: PUSH
3607: LD_VAR 0 13
3611: PUSH
3612: EMPTY
3613: LIST
3614: LIST
3615: PUSH
3616: LD_INT 3
3618: PUSH
3619: LD_INT 22
3621: PUSH
3622: LD_INT 0
3624: PUSH
3625: EMPTY
3626: LIST
3627: LIST
3628: PUSH
3629: EMPTY
3630: LIST
3631: LIST
3632: LIST
3633: LIST
3634: PPUSH
3635: CALL_OW 69
3639: PPUSH
3640: LD_VAR 0 1
3644: PPUSH
3645: CALL_OW 74
3649: PPUSH
3650: CALL_OW 255
3654: ST_TO_ADDR
// SetMultiScore ( new_side , GetMultiScore ( new_side ) + point ) ;
3655: LD_VAR 0 14
3659: PPUSH
3660: LD_VAR 0 14
3664: PPUSH
3665: CALL_OW 507
3669: PUSH
3670: LD_VAR 0 15
3674: PLUS
3675: PPUSH
3676: CALL_OW 506
// end ; end ; end_of_file
3680: PPOPN 15
3682: END
// every 0 0$1 marked 25 do var i , ends , best ;
3683: GO 3685
3685: DISABLE
3686: LD_INT 0
3688: PPUSH
3689: PPUSH
3690: PPUSH
// begin ends := false ;
3691: LD_ADDR_VAR 0 2
3695: PUSH
3696: LD_INT 0
3698: ST_TO_ADDR
// best := 0 ;
3699: LD_ADDR_VAR 0 3
3703: PUSH
3704: LD_INT 0
3706: ST_TO_ADDR
// for i := 1 to 8 do
3707: LD_ADDR_VAR 0 1
3711: PUSH
3712: DOUBLE
3713: LD_INT 1
3715: DEC
3716: ST_TO_ADDR
3717: LD_INT 8
3719: PUSH
3720: FOR_TO
3721: IFFALSE 3757
// if GetMultiScore ( i ) > best then
3723: LD_VAR 0 1
3727: PPUSH
3728: CALL_OW 507
3732: PUSH
3733: LD_VAR 0 3
3737: GREATER
3738: IFFALSE 3755
// best := GetMultiScore ( i ) ;
3740: LD_ADDR_VAR 0 3
3744: PUSH
3745: LD_VAR 0 1
3749: PPUSH
3750: CALL_OW 507
3754: ST_TO_ADDR
3755: GO 3720
3757: POP
3758: POP
// if point_limit then
3759: LD_EXP 19
3763: IFFALSE 3785
// if best > point_limit then
3765: LD_VAR 0 3
3769: PUSH
3770: LD_EXP 19
3774: GREATER
3775: IFFALSE 3785
// ends := true ;
3777: LD_ADDR_VAR 0 2
3781: PUSH
3782: LD_INT 1
3784: ST_TO_ADDR
// if game_time then
3785: LD_EXP 18
3789: IFFALSE 3811
// if game_time <= tick then
3791: LD_EXP 18
3795: PUSH
3796: LD_OWVAR 1
3800: LESSEQUAL
3801: IFFALSE 3811
// ends := true ;
3803: LD_ADDR_VAR 0 2
3807: PUSH
3808: LD_INT 1
3810: ST_TO_ADDR
// if ends then
3811: LD_VAR 0 2
3815: IFFALSE 3860
// begin if GetMultiScore ( your_side ) = best then
3817: LD_OWVAR 2
3821: PPUSH
3822: CALL_OW 507
3826: PUSH
3827: LD_VAR 0 3
3831: EQUAL
3832: IFFALSE 3847
// begin wait ( 0 0$1 ) ;
3834: LD_INT 35
3836: PPUSH
3837: CALL_OW 67
// YouWinInMultiplayer ;
3841: CALL_OW 106
// end else
3845: GO 3858
// begin wait ( 0 0$1 ) ;
3847: LD_INT 35
3849: PPUSH
3850: CALL_OW 67
// YouLostInMultiplayer ;
3854: CALL_OW 107
// end ; end else
3858: GO 3861
// enable ;
3860: ENABLE
// end ;
3861: PPOPN 3
3863: END
// every 0 0$3 marked 15 do var win , i ;
3864: GO 3866
3866: DISABLE
3867: LD_INT 0
3869: PPUSH
3870: PPUSH
// begin win := true ;
3871: LD_ADDR_VAR 0 1
3875: PUSH
3876: LD_INT 1
3878: ST_TO_ADDR
// for i = 1 to Side_Positions do
3879: LD_ADDR_VAR 0 2
3883: PUSH
3884: DOUBLE
3885: LD_INT 1
3887: DEC
3888: ST_TO_ADDR
3889: LD_EXP 12
3893: PUSH
3894: FOR_TO
3895: IFFALSE 3959
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
3897: LD_EXP 12
3901: PUSH
3902: LD_VAR 0 2
3906: ARRAY
3907: PUSH
3908: LD_VAR 0 2
3912: PUSH
3913: LD_OWVAR 2
3917: NONEQUAL
3918: AND
3919: PUSH
3920: LD_VAR 0 2
3924: PPUSH
3925: CALL_OW 108
3929: AND
3930: IFFALSE 3957
// if not AlliedSides ( i , your_side ) then
3932: LD_VAR 0 2
3936: PPUSH
3937: LD_OWVAR 2
3941: PPUSH
3942: CALL 3984 0 2
3946: NOT
3947: IFFALSE 3957
// win := false ;
3949: LD_ADDR_VAR 0 1
3953: PUSH
3954: LD_INT 0
3956: ST_TO_ADDR
3957: GO 3894
3959: POP
3960: POP
// if win then
3961: LD_VAR 0 1
3965: IFFALSE 3980
// begin wait ( 0 0$3 ) ;
3967: LD_INT 105
3969: PPUSH
3970: CALL_OW 67
// YouWinInMultiplayer ;
3974: CALL_OW 106
// exit ;
3978: GO 3981
// end ; enable ;
3980: ENABLE
// end ;
3981: PPOPN 2
3983: END
// function AlliedSides ( i , j ) ; var vysledek ; begin
3984: LD_INT 0
3986: PPUSH
3987: PPUSH
// vysledek := false ;
3988: LD_ADDR_VAR 0 4
3992: PUSH
3993: LD_INT 0
3995: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
3996: LD_VAR 0 1
4000: PPUSH
4001: LD_VAR 0 2
4005: PPUSH
4006: CALL_OW 81
4010: PUSH
4011: LD_INT 1
4013: EQUAL
4014: PUSH
4015: LD_VAR 0 2
4019: PPUSH
4020: LD_VAR 0 1
4024: PPUSH
4025: CALL_OW 81
4029: PUSH
4030: LD_INT 1
4032: EQUAL
4033: AND
4034: PUSH
4035: LD_VAR 0 1
4039: PPUSH
4040: CALL_OW 83
4044: AND
4045: PUSH
4046: LD_VAR 0 2
4050: PPUSH
4051: CALL_OW 83
4055: AND
4056: IFFALSE 4066
// vysledek := true ;
4058: LD_ADDR_VAR 0 4
4062: PUSH
4063: LD_INT 1
4065: ST_TO_ADDR
// result := vysledek ;
4066: LD_ADDR_VAR 0 3
4070: PUSH
4071: LD_VAR 0 4
4075: ST_TO_ADDR
// end ; end_of_file
4076: LD_VAR 0 3
4080: RET
// export to_be_countdowned ; every 0 0$0.2 trigger to_be_countdowned marked 25 do var who , timer ;
4081: LD_EXP 40
4085: IFFALSE 4256
4087: GO 4089
4089: DISABLE
4090: LD_INT 0
4092: PPUSH
4093: PPUSH
// begin enable ;
4094: ENABLE
// who := to_be_countdowned [ 1 ] ;
4095: LD_ADDR_VAR 0 1
4099: PUSH
4100: LD_EXP 40
4104: PUSH
4105: LD_INT 1
4107: ARRAY
4108: ST_TO_ADDR
// to_be_countdowned := Delete ( to_be_countdowned , 1 ) ;
4109: LD_ADDR_EXP 40
4113: PUSH
4114: LD_EXP 40
4118: PPUSH
4119: LD_INT 1
4121: PPUSH
4122: CALL_OW 3
4126: ST_TO_ADDR
// repeat timer := GetTag ( who ) ;
4127: LD_ADDR_VAR 0 2
4131: PUSH
4132: LD_VAR 0 1
4136: PPUSH
4137: CALL_OW 110
4141: ST_TO_ADDR
// if GetSide ( who ) = your_side then
4142: LD_VAR 0 1
4146: PPUSH
4147: CALL_OW 255
4151: PUSH
4152: LD_OWVAR 2
4156: EQUAL
4157: IFFALSE 4173
// SetUnitDisplayNumber ( who , timer ) ;
4159: LD_VAR 0 1
4163: PPUSH
4164: LD_VAR 0 2
4168: PPUSH
4169: CALL_OW 505
// timer := timer - 1 ;
4173: LD_ADDR_VAR 0 2
4177: PUSH
4178: LD_VAR 0 2
4182: PUSH
4183: LD_INT 1
4185: MINUS
4186: ST_TO_ADDR
// SetTag ( who , timer ) ;
4187: LD_VAR 0 1
4191: PPUSH
4192: LD_VAR 0 2
4196: PPUSH
4197: CALL_OW 109
// wait ( 0 0$1 ) ;
4201: LD_INT 35
4203: PPUSH
4204: CALL_OW 67
// until not IsLive ( who ) or not GetTag ( who ) ;
4208: LD_VAR 0 1
4212: PPUSH
4213: CALL_OW 300
4217: NOT
4218: PUSH
4219: LD_VAR 0 1
4223: PPUSH
4224: CALL_OW 110
4228: NOT
4229: OR
4230: IFFALSE 4127
// if not GetTag ( who ) then
4232: LD_VAR 0 1
4236: PPUSH
4237: CALL_OW 110
4241: NOT
4242: IFFALSE 4256
// SetLives ( who , 0 ) ;
4244: LD_VAR 0 1
4248: PPUSH
4249: LD_INT 0
4251: PPUSH
4252: CALL_OW 234
// end ;
4256: PPOPN 2
4258: END
// every 0 0$1 + 0 0$0.1 marked 25 do var i , best , nbest , lastbest , s , first , n ;
4259: GO 4261
4261: DISABLE
4262: LD_INT 0
4264: PPUSH
4265: PPUSH
4266: PPUSH
4267: PPUSH
4268: PPUSH
4269: PPUSH
4270: PPUSH
// begin lastbest := 99999 ;
4271: LD_ADDR_VAR 0 4
4275: PUSH
4276: LD_INT 99999
4278: ST_TO_ADDR
// s := [ ] ;
4279: LD_ADDR_VAR 0 5
4283: PUSH
4284: EMPTY
4285: ST_TO_ADDR
// n := 1 ;
4286: LD_ADDR_VAR 0 7
4290: PUSH
4291: LD_INT 1
4293: ST_TO_ADDR
// repeat best := - 99999 ;
4294: LD_ADDR_VAR 0 2
4298: PUSH
4299: LD_INT 99999
4301: NEG
4302: ST_TO_ADDR
// nbest := 0 ;
4303: LD_ADDR_VAR 0 3
4307: PUSH
4308: LD_INT 0
4310: ST_TO_ADDR
// for i := 1 to 8 do
4311: LD_ADDR_VAR 0 1
4315: PUSH
4316: DOUBLE
4317: LD_INT 1
4319: DEC
4320: ST_TO_ADDR
4321: LD_INT 8
4323: PUSH
4324: FOR_TO
4325: IFFALSE 4431
// if Side_Positions [ i ] then
4327: LD_EXP 12
4331: PUSH
4332: LD_VAR 0 1
4336: ARRAY
4337: IFFALSE 4429
// begin if ( GetMultiScore ( i ) > best ) and ( GetMultiScore ( i ) < lastbest ) then
4339: LD_VAR 0 1
4343: PPUSH
4344: CALL_OW 507
4348: PUSH
4349: LD_VAR 0 2
4353: GREATER
4354: PUSH
4355: LD_VAR 0 1
4359: PPUSH
4360: CALL_OW 507
4364: PUSH
4365: LD_VAR 0 4
4369: LESS
4370: AND
4371: IFFALSE 4398
// begin best := GetMultiScore ( i ) ;
4373: LD_ADDR_VAR 0 2
4377: PUSH
4378: LD_VAR 0 1
4382: PPUSH
4383: CALL_OW 507
4387: ST_TO_ADDR
// nbest := 1 ;
4388: LD_ADDR_VAR 0 3
4392: PUSH
4393: LD_INT 1
4395: ST_TO_ADDR
// end else
4396: GO 4429
// if GetMultiScore ( i ) = best then
4398: LD_VAR 0 1
4402: PPUSH
4403: CALL_OW 507
4407: PUSH
4408: LD_VAR 0 2
4412: EQUAL
4413: IFFALSE 4429
// begin nbest := nbest + 1 ;
4415: LD_ADDR_VAR 0 3
4419: PUSH
4420: LD_VAR 0 3
4424: PUSH
4425: LD_INT 1
4427: PLUS
4428: ST_TO_ADDR
// end ; end ;
4429: GO 4324
4431: POP
4432: POP
// first := true ;
4433: LD_ADDR_VAR 0 6
4437: PUSH
4438: LD_INT 1
4440: ST_TO_ADDR
// if nbest > 0 then
4441: LD_VAR 0 3
4445: PUSH
4446: LD_INT 0
4448: GREATER
4449: IFFALSE 4622
// for i := 1 to 8 do
4451: LD_ADDR_VAR 0 1
4455: PUSH
4456: DOUBLE
4457: LD_INT 1
4459: DEC
4460: ST_TO_ADDR
4461: LD_INT 8
4463: PUSH
4464: FOR_TO
4465: IFFALSE 4620
// if Side_Positions [ i ] then
4467: LD_EXP 12
4471: PUSH
4472: LD_VAR 0 1
4476: ARRAY
4477: IFFALSE 4618
// if GetMultiScore ( i ) = best then
4479: LD_VAR 0 1
4483: PPUSH
4484: CALL_OW 507
4488: PUSH
4489: LD_VAR 0 2
4493: EQUAL
4494: IFFALSE 4618
// if nbest = 1 then
4496: LD_VAR 0 3
4500: PUSH
4501: LD_INT 1
4503: EQUAL
4504: IFFALSE 4555
// s := s ^ [ #Multi-score , n , i , i , i , best ] else
4506: LD_ADDR_VAR 0 5
4510: PUSH
4511: LD_VAR 0 5
4515: PUSH
4516: LD_STRING #Multi-score
4518: PUSH
4519: LD_VAR 0 7
4523: PUSH
4524: LD_VAR 0 1
4528: PUSH
4529: LD_VAR 0 1
4533: PUSH
4534: LD_VAR 0 1
4538: PUSH
4539: LD_VAR 0 2
4543: PUSH
4544: EMPTY
4545: LIST
4546: LIST
4547: LIST
4548: LIST
4549: LIST
4550: LIST
4551: ADD
4552: ST_TO_ADDR
4553: GO 4618
// s := s ^ [ #Multi-score-range , n , n + nbest - 1 , i , i , i , best ] ;
4555: LD_ADDR_VAR 0 5
4559: PUSH
4560: LD_VAR 0 5
4564: PUSH
4565: LD_STRING #Multi-score-range
4567: PUSH
4568: LD_VAR 0 7
4572: PUSH
4573: LD_VAR 0 7
4577: PUSH
4578: LD_VAR 0 3
4582: PLUS
4583: PUSH
4584: LD_INT 1
4586: MINUS
4587: PUSH
4588: LD_VAR 0 1
4592: PUSH
4593: LD_VAR 0 1
4597: PUSH
4598: LD_VAR 0 1
4602: PUSH
4603: LD_VAR 0 2
4607: PUSH
4608: EMPTY
4609: LIST
4610: LIST
4611: LIST
4612: LIST
4613: LIST
4614: LIST
4615: LIST
4616: ADD
4617: ST_TO_ADDR
4618: GO 4464
4620: POP
4621: POP
// n := n + nbest ;
4622: LD_ADDR_VAR 0 7
4626: PUSH
4627: LD_VAR 0 7
4631: PUSH
4632: LD_VAR 0 3
4636: PLUS
4637: ST_TO_ADDR
// lastbest := best ;
4638: LD_ADDR_VAR 0 4
4642: PUSH
4643: LD_VAR 0 2
4647: ST_TO_ADDR
// until nbest = 0 ;
4648: LD_VAR 0 3
4652: PUSH
4653: LD_INT 0
4655: EQUAL
4656: IFFALSE 4294
// if game_time then
4658: LD_EXP 18
4662: IFFALSE 4697
// s := [ #Hunt-Limit , 0 , game_time - tick ] ^ s ;
4664: LD_ADDR_VAR 0 5
4668: PUSH
4669: LD_STRING #Hunt-Limit
4671: PUSH
4672: LD_INT 0
4674: PUSH
4675: LD_EXP 18
4679: PUSH
4680: LD_OWVAR 1
4684: MINUS
4685: PUSH
4686: EMPTY
4687: LIST
4688: LIST
4689: LIST
4690: PUSH
4691: LD_VAR 0 5
4695: ADD
4696: ST_TO_ADDR
// display_strings := s ;
4697: LD_ADDR_OWVAR 47
4701: PUSH
4702: LD_VAR 0 5
4706: ST_TO_ADDR
// enable ;
4707: ENABLE
// end ;
4708: PPOPN 7
4710: END
// every 0 0$1 marked 25 do var veh ;
4711: GO 4713
4713: DISABLE
4714: LD_INT 0
4716: PPUSH
// begin repeat repeat veh := FilterAllUnits ( [ f_type , unit_vehicle ] ) ;
4717: LD_ADDR_VAR 0 1
4721: PUSH
4722: LD_INT 21
4724: PUSH
4725: LD_INT 2
4727: PUSH
4728: EMPTY
4729: LIST
4730: LIST
4731: PPUSH
4732: CALL_OW 69
4736: ST_TO_ADDR
// wait ( 0 0$3 ) ;
4737: LD_INT 105
4739: PPUSH
4740: CALL_OW 67
// until veh < vehmax ;
4744: LD_VAR 0 1
4748: PUSH
4749: LD_EXP 23
4753: LESS
4754: IFFALSE 4717
// wait ( Rand ( vehresp [ 1 ] div side_count , vehresp [ 2 ] div side_count ) ) ;
4756: LD_EXP 20
4760: PUSH
4761: LD_INT 1
4763: ARRAY
4764: PUSH
4765: LD_EXP 16
4769: DIV
4770: PPUSH
4771: LD_EXP 20
4775: PUSH
4776: LD_INT 2
4778: ARRAY
4779: PUSH
4780: LD_EXP 16
4784: DIV
4785: PPUSH
4786: CALL_OW 12
4790: PPUSH
4791: CALL_OW 67
// vehicles_create_vehicle ( false ) ;
4795: LD_INT 0
4797: PPUSH
4798: CALL 2935 0 1
// until false ;
4802: LD_INT 0
4804: IFFALSE 4717
// end ;
4806: PPOPN 1
4808: END
// every 3 marked 25 do var side , peop ;
4809: GO 4811
4811: DISABLE
4812: LD_INT 0
4814: PPUSH
4815: PPUSH
// begin if not to_resp then
4816: LD_EXP 33
4820: NOT
4821: IFFALSE 4825
// exit ;
4823: GO 5026
// enable ;
4825: ENABLE
// side := to_resp [ 1 ] ;
4826: LD_ADDR_VAR 0 1
4830: PUSH
4831: LD_EXP 33
4835: PUSH
4836: LD_INT 1
4838: ARRAY
4839: ST_TO_ADDR
// to_resp := Delete ( to_resp , 1 ) ;
4840: LD_ADDR_EXP 33
4844: PUSH
4845: LD_EXP 33
4849: PPUSH
4850: LD_INT 1
4852: PPUSH
4853: CALL_OW 3
4857: ST_TO_ADDR
// repeat repeat peop := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , side ] , [ f_ok ] ] ) ;
4858: LD_ADDR_VAR 0 2
4862: PUSH
4863: LD_INT 21
4865: PUSH
4866: LD_INT 1
4868: PUSH
4869: EMPTY
4870: LIST
4871: LIST
4872: PUSH
4873: LD_INT 22
4875: PUSH
4876: LD_VAR 0 1
4880: PUSH
4881: EMPTY
4882: LIST
4883: LIST
4884: PUSH
4885: LD_INT 50
4887: PUSH
4888: EMPTY
4889: LIST
4890: PUSH
4891: EMPTY
4892: LIST
4893: LIST
4894: LIST
4895: PPUSH
4896: CALL_OW 69
4900: ST_TO_ADDR
// wait ( 0 0$5 ) ;
4901: LD_INT 175
4903: PPUSH
4904: CALL_OW 67
// until peop < npeop ;
4908: LD_VAR 0 2
4912: PUSH
4913: LD_EXP 27
4917: LESS
4918: IFFALSE 4858
// wait ( Rand ( peopresp [ 1 ] , peopresp [ 2 ] ) ) ;
4920: LD_EXP 28
4924: PUSH
4925: LD_INT 1
4927: ARRAY
4928: PPUSH
4929: LD_EXP 28
4933: PUSH
4934: LD_INT 2
4936: ARRAY
4937: PPUSH
4938: CALL_OW 12
4942: PPUSH
4943: CALL_OW 67
// uc_side := side ;
4947: LD_ADDR_OWVAR 20
4951: PUSH
4952: LD_VAR 0 1
4956: ST_TO_ADDR
// uc_nation := side_nations [ side ] ;
4957: LD_ADDR_OWVAR 21
4961: PUSH
4962: LD_EXP 14
4966: PUSH
4967: LD_VAR 0 1
4971: ARRAY
4972: ST_TO_ADDR
// hc_name :=  ;
4973: LD_ADDR_OWVAR 26
4977: PUSH
4978: LD_STRING 
4980: ST_TO_ADDR
// PrepareMechanic ( 0 , 4 ) ;
4981: LD_INT 0
4983: PPUSH
4984: LD_INT 4
4986: PPUSH
4987: CALL_OW 383
// hc_importance := 0 ;
4991: LD_ADDR_OWVAR 32
4995: PUSH
4996: LD_INT 0
4998: ST_TO_ADDR
// hc_gallery :=  ;
4999: LD_ADDR_OWVAR 33
5003: PUSH
5004: LD_STRING 
5006: ST_TO_ADDR
// PlaceUnitArea ( CreateHuman , arstartveh , true ) ;
5007: CALL_OW 44
5011: PPUSH
5012: LD_INT 22
5014: PPUSH
5015: LD_INT 1
5017: PPUSH
5018: CALL_OW 49
// until false ;
5022: LD_INT 0
5024: IFFALSE 4858
// end ;
5026: PPOPN 2
5028: END
